import FYPlatformMgr from "./FYPlatformMgr";
import FYLog from "../Frame/FYLog";

/** 阿拉丁 关卡统计 onRunning 事件类型 */
export enum aldStageOnRunningEvent {
    /** 发起支付 */
    payStart = "payStart",
    /** 支付成功 */
    paySuccess = "paySuccess",
    /** 支付失败 */
    payFail = "payFail",
    /** 使用道具 */
    tools = "tools",
    /** 复活 */
    revive = "revive",
    /** 奖励 */
    award = "award",
}

/** 阿拉丁 关卡统计 onEnd 事件类型 */
export enum aldStageOnEndEvent {
    /** 关卡完成 */
    complete = "complete",
    /** 关卡失败 */
    fail = "fail",
}

/** 阿拉丁 关卡统计 onRunning 事件参数 */
export interface aldStageOnRunningParams {
    /** 商品/道具名称 */
    itemName: string,
    /** 商品/道具ID */
    itemId?: string,
    /** 商品/道具数量 默认:1 */
    itemCount?: number,
    /** 描述 */
    desc?: string,
    /** 商品/道具价格 默认:0 */
    itemMoney?: number
}

/** 阿拉丁 关卡统计 onEnd 事件参数 */
export interface aldStageOnEndParams {
    /** 对关卡失败/成功的描述 */
    desc?: string,
}

/** 阿拉丁SDK */
export default class ALDSDK {
    public static readonly Instance: ALDSDK = new ALDSDK();
    private constructor() { }

    public static Switch = FYPlatformMgr.isQQGame() || FYPlatformMgr.isWX();

    public aldOnShareAppMessage(cb) {
        if (ALDSDK.Switch && wx.aldOnShareAppMessage) {
            wx.aldOnShareAppMessage(cb);
        }
    }

    public aldShareAppMessage(param) {
        if (ALDSDK.Switch && wx.aldShareAppMessage) {
            wx.aldShareAppMessage(param)
        }
    }

    public aldSendEvent(eventName: string, param?: { [paramName: string]: string }) {
        if (ALDSDK.Switch && wx.aldSendEvent) {
            if (param) {
                wx.aldSendEvent(eventName, param)
            } else {
                wx.aldSendEvent(eventName)
            }
        }
    }

    /**
     * 发送用户openid给阿拉丁 做更加详细的数据统计
     * @param openId 
     */
    public aldSendOpenid(openId: string) {
        if (ALDSDK.Switch && wx.aldSendOpenid) {
            wx.aldSendOpenid(openId);
        }
    }

    /**
     * 关卡开始
     * @param stageId 关卡ID 1 , 2 , 3 , 1.1 , 1.2 , 1.3 格式 最多支持 32 个字符
     * @param stageName 关卡名称 最多支持 32 个字符
     * @param userId 用户ID 最多支持 32 个字符
     */
    public aldStageOnStart(stageId: string, stageName: string, userId?: string) {
        if (ALDSDK.Switch) {
            try {
                let param = {};
                param["stageId"] = stageId;
                param["stageName"] = stageName;
                if (userId) {
                    param["userId"] = userId;
                }
                wx.aldStage.onStart(param);
            } catch (error) {
                FYLog.error(error);
            }
        }
    }

    /**
     * 捕捉用户在关卡中的一些行为和操作
     * @param stageId 关卡ID 1 , 2 , 3 , 1.1 , 1.2 , 1.3 格式 最多支持 32 个字符
     * @param stageName 关卡名称 最多支持 32 个字符
     * @param event 事件类型 
     * @param params 事件参数
     * @param userId 用户ID 最多支持 32 个字符
     */
    public aldStageOnRunning(stageId: string, stageName: string, event: aldStageOnRunningEvent, params: aldStageOnRunningParams, userId?: string) {
        if (ALDSDK.Switch) {
            try {
                let param = {};
                param["stageId"] = stageId;
                param["stageName"] = stageName;
                param["event"] = event;
                param["params"] = params;
                if (userId) {
                    param["userId"] = userId;
                }

                wx.aldStage.onRunning(param);

            } catch (error) {
                FYLog.error(error);
            }
        }
    }

    /**
     * 捕捉用户在关卡中的一些操作
     * @param stageId 关卡ID 1 , 2 , 3 , 1.1 , 1.2 , 1.3 格式 最多支持 32 个字符
     * @param stageName 关卡名称 最多支持 32 个字符
     * @param event 事件类型
     * @param params 事件参数
     * @param userId 用户ID 最多支持 32 个字符
     */
    public aldStageOnEnd(stageId: string, stageName: string, event: aldStageOnEndEvent, params: aldStageOnEndParams, userId?: string) {
        if (ALDSDK.Switch) {
            try {
                let param = {};
                param["stageId"] = stageId;
                param["stageName"] = stageName;
                param["event"] = event;
                param["params"] = params;
                if (userId) {
                    param["userId"] = userId;
                }
                wx.aldStage.onEnd(param);
            } catch (error) {
                FYLog.error(error);
            }
        }
    }
}
